package com.itguigu.inversion.依赖传递的三种方式.setter方式传递;

@SuppressWarnings("NonAsciiCharacters")
public class Test {
    public static void main(String[] args) {
        小米智能电视 小米智能电视 = new 小米智能电视();
        万能遥控器 万能遥控器 = new 万能遥控器();
        // setter传入依赖
        万能遥控器.setiTv(小米智能电视);
        万能遥控器.close();
    }
}

interface IOpenAndClose {
    /**
     * 注意这里是空参的,没有依赖接口
     */
    void open();

    void close();
}

interface ITv {
    void open();

    void close();
}

@SuppressWarnings("NonAsciiCharacters")
class 小米智能电视 implements ITv {

    @Override
    public void open() {
        System.out.println("我是小米智能电视,我打开了");
    }

    @Override
    public void close() {
        System.out.println("我是小米智能电视,我关闭了");
    }
}

@SuppressWarnings("NonAsciiCharacters")
class 万能遥控器 implements IOpenAndClose {

    // 使用成员变量的形式,注入依赖
    private ITv iTv;

    /**
     * 注意这里是空参的,没有依赖接口
     */
    @Override
    public void open() {
        if (iTv == null) {
            System.out.println("没有找到电视");
        } else {
            this.iTv.open();
        }
    }

    @Override
    public void close() {
        if (iTv == null) {
            System.out.println("没有找到电视");
        } else {
            this.iTv.close();
        }
    }

    /**
     * 使用set的方式给成员变量赋值
     *
     * @param iTv 某个型号的电视
     */
    public void setiTv(ITv iTv) {
        this.iTv = iTv;
    }
}
